package github.javaguide.remoting.dto;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.ToString;

import java.io.Serializable;

/**
 * rpc请求实体类。当你要调用远程方法的时候，你需要先传输一个RpcRequest给对方，RpcRequest里面包含了要调用的目标方法和类的名称、参数等数据。
 */
@AllArgsConstructor
@NoArgsConstructor
@Getter
@Builder
@ToString
public class RpcRequest implements Serializable {
    private static final long serialVersionUID = 1905122041950251207L;
    private String requestId;
    private String interfaceName;
    private String methodName;
    private Object[] parameters;
    private Class<?>[] paramTypes;
    /**
     * version字段(服务版本)主要是为后续不兼容升级提供可能
     */
    private String version;
    /**
     * group字段主要处理一个接口多个实现类的情况
     */
    private String group;

    public String getRpcServiceName() {
        return this.getInterfaceName() + this.getGroup() + this.getVersion();
    }
}
